import axios from 'axios'
// import store from '@/store'
import qs from 'qs'
// import storage from 'store'
import { isFormData } from '@/utils'
import { message} from 'antd';
// import router from '../router'
/* 项目使用
   需要全局设置axios，对不同的请求进行处理
*/
axios.defaults.baseURL  = `/api`;
export function request(option) {
  return new Promise((resolve, reject) => {
    if (option.method === 'get') {
      axios.get(option.url, {
        params: option.data /* get第二个参数是一个对象，这个对象的params是一个参数对象 */
      })
        .then(response => {
          resolve(response)
        }, err => {
          reject(err)
        })
        .catch((error) => {
          reject(error)
        })
    } else if (option.method === 'post') {
      axios.post(option.url, option.data) /* post的第二个参数就是一个参数对象 */
      .then(response => {
        resolve(response)
      }, err => {
        reject(err)
      })
        .catch((error) => {
          reject(error)
        })
    }
  })
}

// 异常拦截处理器
const errorHandler = (error) => {
  if (error.response) {
    const data = error.response.data
    console.log(error.response.status)
    // 从 localstorage 获取 token
    // const token = storage.get(ACCESS_TOKEN)
    if (error.response.status === 403) {
      message.error(data.message)
    }
    if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
      message.error('Authorization verification failed')
      // if (token) {
      //   store.dispatch('Logout').then(() => {
      //     setTimeout(() => {
      //       window.location.reload()
      //     }, 1500)
      //   })
      // }
    }
  }
  return Promise.reject(error)
}

// request interceptor
axios.interceptors.request.use(config => {
  if (config.method === 'post') {
    const params = config.data
    // let transData=null;
    if (isFormData(params)) {
      config.headers.post = { 'Content-Type': 'multipart/form-data' }
    } else {
      config.data = qs.stringify(params)
    }
  }
  return config
}, errorHandler)
// response interceptor
axios.interceptors.response.use((response) => {
  // 接口返回权限
  if (response.data.data === '无权限访问') {
    message.error('请求用户信息失败，请重新登录')
    localStorage.setItem('isLogin', '0');
    localStorage.removeItem('userInfo');
    console.log(this)
    this.props.history.push('/login');
  }
  return response.data
}, errorHandler)

// mock数据使用，axios的一个实例
const request2 = axios.create({
  // API 请求的默认前缀
  baseURL: process.env.VUE_APP_API_BASE_URL,
  timeout: 6000 // 请求超时时间
})
request2.interceptors.request.use(config => {
  // const token = storage.get(ACCESS_TOKEN)
  // // 如果 token 存在
  // // 让每个请求携带自定义 token 请根据实际情况自行修改
  // if (token) {
  //   config.headers['Access-Token'] = token
  // }
  return config
}, errorHandler)

// response interceptor
request2.interceptors.response.use((response) => {
  return response.data
}, errorHandler)

export {
  request2 as axios
}

export default request
